﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace DesignPattern
{
    // 懒汉模式。该单例模式已能够使用。但由于get方法过于繁琐，还能改进
    class Danli2
    {
        private static volatile Danli2 instance;
        private static readonly object lock_ = new object();

        private Danli2() { }        // 构造私有

        // 通过属性获取唯一对象。故为属性设为static
        // 否则，只能通过实例使用属性：想要使用属性就得使用实例，想要获取唯一实例就得通过属性。自相矛盾了
        public static Danli2 Instance       
        {
            get
            {
                if(instance==null)      // 双检索
                {
                    lock(lock_)
                    {
                        if (instance == null)
                            instance = new Danli2();
                    }
                }
                return instance;
            }
        }

        private int count = 0;

        public int Count
        {
            get
            {
                return count;
            }
        }

        public void IncreatCount()
        {
            Interlocked.Increment(ref count);
        }

    }
}
